package com.fruit.mapper.pay;

import java.util.List;
import java.util.Map;

import com.fruit.pojo.base.AreaGoodsCount;
import com.fruit.pojo.goods.GoodsSpec;
import com.fruit.pojo.goods.GoodsSpecTime;
import com.fruit.pojo.order.Order;
import com.fruit.pojo.order.OrderGoods;
import com.fruit.pojo.pay.BillDetail;
import com.fruit.pojo.pay.TransactionFlow;

/**
 * 
 * PayMapper
 *
 * @author shibeilei
 * @version 2017.12.05 19:14
 *
 */
public interface PayMapper {
	
	/**
	 * 保存账单信息
	 * @param bd 账单信息
	 * @return 返回新增结果
	 */
	int saveBillDetail(BillDetail bd);
	
	/**
	 * 保存交易信息
	 * @param tf 交易流水信息
	 * @return 返回新增结果
	 */
	int saveTransactionFlow(TransactionFlow tf);
	
	/**
	 * 修改交易流水单号
	 * @param tf 交易流水信息
	 * @return 返回修改结果
	 */
	int updateTransactionFlowCode(TransactionFlow tf);
	
	/**
	 * 修改交易流水状态
	 * @param tf 交易流水信息
	 * @return 返回修改结果
	 */
	int updateTransactionFlowState(TransactionFlow tf);
	
	/**
	 * 通过交易号获取交易流水
	 * @param transactionCode 交易流水号
	 * @return 返回交易流水信息
	 */
	TransactionFlow getTransactionFlow(String transactionCode);
	
	/**
	 * 通过交易ID获取交易流水
	 * @param id 交易流水ID
	 * @return 返回交易流水信息
	 */
	TransactionFlow getTransactionFlowById(long id);
	
	/**
	 * 保存订单信息
	 * @param o 订单信息
	 * @return 返回新增结果
	 */
	int saveOrder(Order o);
	
	/**
	 * 修改订单CODE
	 * @param o 订单信息
	 * @return 返回编辑结果
	 */
	int updateOrderCode(Order o);
	
	/**
	 * 保存订单商品信息
	 * @param og 订单商品信息
	 * @return 返回新增结果
	 */
	int saveOrderGoods(OrderGoods og);
	
	/**
	 * 修改商品库存
	 * @param gs 商品规格信息
	 * @return 返回商品库存编辑结果
	 */
	int updateGoodsSpecStockNum(GoodsSpec gs);
	
	/**
	 * 修改商品库存
	 * @param gst 商品规格期次信息
	 * @return 返回商品规格期次库存编辑结果
	 */
	int updateGoodsSpecTimeStockNum(GoodsSpecTime gst);
	
	/**
	 * 修改套餐商品库存
	 * @param params 套餐商品id、库存数量
	 * @return 返回记录数
	 */
	int updatePackageGoodsStockNum(Map<String, Object> params);
	/**
	 * 增加套餐商品库存
	 * @param params 套餐商品id、库存数量
	 * @return 返回记录数
	 */
	int updateAddPackageGoodsStockNum(Map<String, Object> params);
	/**
	 * 增加套餐商品已售数量
	 * @param params 套餐商品id、库存数量
	 * @return 返回记录数
	 */
	int updateAddPackageGoodsSaleNum(Map<String, Object> params);
	
	/**
	 * 修改商品实际库存
	 * @param og 订单商品信息
	 * @return 商品实际库存编辑结果
	 */
	int updateGoodsSpecTimeRealStockNum(OrderGoods og);
	
	/**
	 * 修改商品已售数量
	 * @param og 订单商品信息
	 * @return 商品已售数量编辑结果
	 */
	int updateGoodsSpecTimeSaleNum(OrderGoods og);
	/**
	 * 增加商品库存
	 * @param params parmas
	 * @return 商品库存新增结果
	 */
	int updateAddGoodsSpecTimeStockNum(Map<String, Object> params);
	
	/**
	 * 修改区域商品认购数量
	 * @param agc 区域商品统计信息
	 * @return 返回区域商品已购数量编辑结果
	 */
	int updateAreaGoodsTakeNumById(AreaGoodsCount agc);
	
	/**
	 * 修改区域商品认购数量
	 * @param params params
	 * @return 返回区域商品已购数量编辑结果
	 */
	int updateAreaGoodsTakeNumByMap(Map<String, Object> params);
	
	/**
	 * 获取基地区域商品统计表
	 * @param params params
	 * @return 返回区域商品统计信息
	 */
	AreaGoodsCount getAreaGoodsCountById(Map<String, Object> params);
	
	/**
	 * 获取未认购树的ID
	 * @param params params
	 * @return 返回未认购果树的ID
	 */
	List<Long> getNotTakeGoodsIds(Map<String, Object> params);
	
	/**
	 * 修改树的绑定状态
	 * @param params params
	 * @return 返回果树绑定状态修改结果
	 */
	int updateAreaGoodsUserBinding(Map<String, Object> params);
	
	/**
	 * 修改树未绑定
	 * @param params params
	 * @return 返回果树绑定状态修改结果
	 */
	int updateAreaGoodsNotUserBinding(Map<String, Object> params);
	
}
